package com.studyweb.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 文件上传配置属性类
 * 
 * @author StudyWeb Team
 * @since 1.0.0
 */
@Data
@Component
@ConfigurationProperties(prefix = "file.upload")
public class FileUploadProperties {
    
    /**
     * 文件存储路径
     */
    private String path = "D:/uploads/";
    
    /**
     * 访问URL前缀
     */
    private String urlPrefix = "/files/";
    
    /**
     * 允许的文件类型
     */
    private String allowedTypes = ".jpg,.jpeg,.png,.gif,.bmp,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt,.zip,.rar";
    
    /**
     * 单个文件最大大小（MB）
     */
    private Integer maxSize = 50;
    
    /**
     * 检查文件类型是否允许
     * 
     * @param fileName 文件名
     * @return 是否允许
     */
    public boolean isAllowedType(String fileName) {
        if (fileName == null || fileName.trim().isEmpty()) {
            return false;
        }
        
        String lowerFileName = fileName.toLowerCase();
        String[] types = allowedTypes.split(",");
        
        for (String type : types) {
            if (lowerFileName.endsWith(type.trim())) {
                return true;
            }
        }
        
        return false;
    }
    
    /**
     * 获取文件扩展名
     * 
     * @param fileName 文件名
     * @return 文件扩展名
     */
    public String getFileExtension(String fileName) {
        if (fileName == null || fileName.trim().isEmpty()) {
            return "";
        }
        
        int lastDotIndex = fileName.lastIndexOf(".");
        if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) {
            return fileName.substring(lastDotIndex).toLowerCase();
        }
        
        return "";
    }
    
    /**
     * 检查是否为图片文件
     * 
     * @param fileName 文件名
     * @return 是否为图片文件
     */
    public boolean isImageFile(String fileName) {
        if (fileName == null || fileName.trim().isEmpty()) {
            return false;
        }
        
        String extension = getFileExtension(fileName);
        return extension.matches("\\.(jpg|jpeg|png|gif|bmp)");
    }
    
    /**
     * 获取图片存储路径
     * 
     * @return 图片存储路径
     */
    public String getImagePath() {
        return "images/";
    }
    
    /**
     * 检查是否为文档文件
     * 
     * @param fileName 文件名
     * @return 是否为文档文件
     */
    public boolean isDocumentFile(String fileName) {
        if (fileName == null || fileName.trim().isEmpty()) {
            return false;
        }
        
        String extension = getFileExtension(fileName);
        return extension.matches("\\.(pdf|doc|docx|xls|xlsx|ppt|pptx|txt)");
    }
    
    /**
     * 获取文档存储路径
     * 
     * @return 文档存储路径
     */
    public String getDocumentPath() {
        return "documents/";
    }
}